#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    //设置了窗口的初始大小为 600x400 像素，窗口的背景颜色为淡黄色。
    ui->setupUi(this);
    resize(600,400);
    setStyleSheet("QWidget{background:lightyellow}");

    //初始化了贪吃蛇的初始位置，使用 QRectF 类表示贪吃蛇的每个节点的位置和大小，调用 addTopRectF() 函数两次，向贪吃蛇的头部添加了两个节点。
    snake.append(QRectF(200,500,snakeNodeWidth,snakeNodeHeight));
    addTopRectF();
    addTopRectF();

    // 在坐标（400，200）处设置第一个食物
    rewardNode.append(QRectF(400,200,snakeNodeWidth,snakeNodeWidth));

    //创建了一个新的 QTimer 对象，用于触发定时事件，并将它与 timeOut() 槽函数连接起来。
    timer = new QTimer;
    connect(timer, SIGNAL(timeout()),this,SLOT(timeOut()));

    rewardTimer = new QTimer;
    connect(rewardTimer,SIGNAL(timeout()),this,SLOT(rewardTimeOut()));
    this->setWindowTitle("SNAKE");
}

//释放对象ui使用的资源

Widget::~Widget()
{
    delete ui;
}

/*在 paintEvent 函数中，首先创建了一个 QPainter 对象用于绘制图形。
 *  然后设置了画笔、画刷和字体等属性。
 *  接着，通过循环遍历贪吃蛇的节点列表和奖励节点列表，分别绘制贪吃蛇的方块和奖励节点的圆形。
 *  在绘制完成后，根据游戏是否结束来显示游戏结束的提示信息。
 *  最后调用 QWidget 的 paintEvent 函数来完成绘制。*/

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen;
    QBrush brush;
    QFont fontg ( "Microsoft YaHei", 20, 50);

    painter.setRenderHint(QPainter::Antialiasing);

    pen.setColor(Qt::black);
    brush.setColor(Qt::red);
    brush.setStyle(Qt::SolidPattern);
    painter.setPen(pen);
    painter.setBrush(brush);

    for(int i=0; i<snake.length(); i++){
        painter.drawRect(snake.at(i));
    }
    brush.setColor(QColorConstants::Svg::yellowgreen);
    painter.setBrush(brush);
    for(int i=0; i<rewardNode.length(); i++){
        painter.drawEllipse(rewardNode.at(i));
    }
    pen.setColor(Qt::black);
    painter.setPen(pen);
    painter.setFont(fontg);
    painter.drawText(245,40,QString("分数：")+QString("%1").arg(snake.length()-3));
    //QString("%1") 创建了一个格式化字符串，其中 %1 是一个占位符，
    //它将在后面的 arg() 方法中用实际的值替换。
    //arg(snake.length()) 将 snake.length() 返回的整数值插入到 %1 的位置，然后返回一个包含了这个整数值的字符串。

    if(snakeStrike()){
        QFont font("方正舒体",30,QFont::ExtraLight,false);
        painter.setFont(font);
        painter.drawText((this->width()-300)/2,(this->height()-30)/2,QString("GAME OVER!"));
        timer->stop();
        rewardTimer->stop();
        gameOver = true;
    }

    QWidget::paintEvent(event);
}
